import { showToast } from 'vant'
import router from '@/router'

const errorHandler = {
  install(app) {
    // 注册全局错误处理方法
    app.config.globalProperties.$handleError = error => {
      console.log('error', error)
      // 处理 HTTP 错误
      if (error.response) {
        const { status, data } = error.response

        // 处理登录失效
        if (status === 999) {
          showToast('登录已失效，请重新登录')
          router.push('/login').then(r => console.error(r))
          return
        }

        // 处理其他错误状态
        if (data && data.message) {
          showToast(data.message)
        } else {
          showToast('请求失败，请稍后重试')
        }
      } else if (error.request) {
        // 处理网络错误
        showToast('网络错误，请检查网络连接')
      } else {
        // 处理其他错误
        showToast(error.message || '发生未知错误')
      }

      // 开发环境下打印错误信息
      if (import.meta.env.DEV) {
        console.error('Error:', error)
      }
    }

    // 注册全局错误处理函数
    app.config.errorHandler = (err, vm, info) => {
      console.log('err', err)
      console.log('vm', vm)
      console.log('info', info)
      // 处理 Vue 组件中的错误
      console.error('Vue Error:', err)
      console.error('Error Info:', info)
      showToast('应用发生错误，请刷新页面重试')
    }

    // 注册全局未捕获的 Promise 错误处理
    // 确保仅在浏览器环境中监听 unhandledrejection
    if (typeof window !== 'undefined') {
      // eslint-disable-next-line no-undef
      window.addEventListener('unhandledrejection', event => {
        console.log('event', event)
        event.preventDefault()
        app.config.globalProperties.$handleError(event.reason)
      })
    }
  }
}

export default errorHandler
